//服务器的回调函数,业务代码
//服务器的总设置
const handlerBlogRoute = require('./src/routes/blog');
const querystring = require("querystring");
const getPostData=(req)=>{
    const promise=new Promise((resolve,reject)=>{
        if(req.method!=='POST'){
            resolve({});
            return;
        }
        if(req.headers['content-type']!=='application/json'){
            resolve({});
            return ;
        }
        //说明既是post请求，又是json对象
        let postData='';
        req.on('data',(chunk)=>{
            postData+=chunk.toString();
        })
        req.on('end',()=>{
            if(!postData){
                resolve({});
                return ;
            }
            resolve(
                JSON.parse(postData)
            );
        })

    });
    return promise;
}

const serverHandler = (req, res) => {
    res.setHeader('Content-Type', 'application/json');

    const url = req.url;
    req.path = url.split('?')[0];
    //解析query
    req.query = querystring.parse(url.split('?')[1]);

    //博客相关路由，要在相关路由之前处理好getdata的事
    //但是postData只能在回调函数中处理。怎么才能在handlerBlogRoute这个函数中使用呢
    //把它绑定在req的属性中
    getPostData(req).then((postData)=>{
        req.body=postData;
        const blogDataPromise = handlerBlogRoute(req, res);
        //console.log(blogData,typeof blogData);
        if (blogDataPromise) {
            blogDataPromise.then((blogData)=>{
                res.end(
                    JSON.stringify(blogData)
                );
            })
            return;
        }
        //writeHeader可以设置http返回状态码，多个http响应头。但是setHeader只针对单一属性的设置。
        res.writeHead(404, {'Content-Type': 'text/plain'});
        res.write('404 not Found');
        res.end();
    })
    // if (blogData) {
    //     res.end(
    //         JSON.stringify(blogData)
    //     );
    //     return;
    // }

}
//导出serverhandler
module.exports = serverHandler;